Skip to content

[WIP] GNOME 50#59394

Draft
oreo639 wants to merge 25 commits intovoid-linux:masterfrom
oreo639:gnome50
Draft

[WIP] GNOME 50#59394
oreo639 wants to merge 25 commits intovoid-linux:masterfrom
oreo639:gnome50

Conversation

@oreo639
Copy link
Copy Markdown
Member

@oreo639 oreo639 commented Mar 16, 2026

Testing the changes

  • I tested the changes in this PR: briefly

This PR is a work in progress, test at your own risk.

Note that this currently has some issues that make using it less than ideal.

Due to gnome-session being held back, shutdown and suspend don't appear at all (the return value for CanShutdown(), CanSuspend(), etc. changed from a boolean to an integer in newer versions of gnome-session, and I haven't fixed it yet).
There is also an issue where "GNOME Shell" is always reported as "Not Responding" by GNOME Session whenever you try to log out.

There is work by swagtoy for Gentoo on implementing a custom leader that can be installed on top of gnome-session to allow it to work on non-systemd distros (only for openrc atm), although that is also WIP: https://github.com/swagtoy/gnome-session-openrc/ should be possible to adapt or extend it to support other user service systems as well.

I haven't gotten around to updating GDM yet, it should be possible (at least to 49.x, since that is what Artix is using). Either way, GDM Wayland does work, along with logging in and locking the screen inside GNOME.

TODO: gnome-initial-setup needs to be fixed for the gnome-session change as well, just didn't do it yet.

@oreo639 oreo639 marked this pull request as draft March 16, 2026 04:40
@swagtoy
Copy link
Copy Markdown

swagtoy commented Mar 19, 2026

WIP: https://github.com/swagtoy/gnome-session-openrc/tree/independence should be possible to adapt or extend it to support other user service systems as well.

Doesn't void use runit still? Do you guys thing that's going to be reliable for this, because I don't recall that having user services. Without those, most efforts are going to be a pain, unless you have a trick up your sleeve I'm unaware of

@oreo639
Copy link
Copy Markdown
Member Author

oreo639 commented Mar 19, 2026

Do you guys thing that's going to be reliable for this, because I don't recall that having user services.

You can pretty easily do user services in runit by creating a runsvdir for the user when they login. (That's what the runit backend for turnstile does.)

The part that makes runit problematic in this case is that it doesn't support dependencies. (e.g. in the runit turnstile backend, some features, such as signaling to dinit systemwide user services when a user session has been created, can't really be implemented through runit. Even for system services, we basically use the fact that runit is single threaded and will retry starting a service multiple times to work around ordering issues. For example, the gdm service "depends" on dbus by simply erroring out if dbus hasn't been started yet. Runit doesn't know that gdm depends on dbus, just that it failed to start and can be tried again later.)

That being said, we don't technically need to use runit to manage the gnome session services (it is already not using runit for that), and some systems like dinit and shepherd support being run as usermode process supervision daemons alongside another init system.

@swagtoy
Copy link
Copy Markdown

swagtoy commented Mar 19, 2026

I've never been a runit fan for this reason :)

I'd personally encourage some other init system but I doubt i can wade my way on that. I just remember messing with void many many moons ago and finding runit's simplicity to be a pain point than a killer.

But I'm no boss. Just my 2c. I couldn't personally see how runit wouldve worked for this, which is why i asked the question. Good luck though!

@oreo639
Copy link
Copy Markdown
Member Author

oreo639 commented Apr 3, 2026

One thing to note, I was able to use gnome-session-shepherd: https://gitlab.gnome.org/noe/gnome-session-shepherd
It is currently targeting GNOME 48 though, it is a full reimplementation rather than just the leader (probably not desirable since the D-Bus API only depends on logind), and it doesn't fully implement the D-Bus API so it isn't much better than just using gnome-session 48 ATM, but it does work.

@chrysos349
Copy link
Copy Markdown
Contributor

gnome-session-shepherd

could you share the template and explain how you made it work?

@oreo639
Copy link
Copy Markdown
Member Author

oreo639 commented Apr 3, 2026

could you share the template and explain how you made it work?

Again, it has issues that aren't present with gnome-session 48 so I don't reccomend it ATM, although I pushed it to the gsession-shepherd branch if you are curious.

It uses guile-ini to reimplement the old .desktop based service manager, but with modern service management and monitoring with shepherd (which can be controlled with the gherd script).

I did notice issues with scaling being broken when using it though, although I haven't looked into that yet.
It also specifically looks for the the .desktop files in /etc/xdg/autostart and not /usr/share/applications so you might have to symlink them (specifically org.gnome.Shell.desktop).

Edit: the scaling issues are caused by the unimplemented RegisterClient D-Bus API, which causes gsd-xsettings to fail to start.

@chrysos349
Copy link
Copy Markdown
Contributor

I pushed it here

thanks! i looked at gnome-session-shepherd during gnome 48-49 transition. it was still untagged back then, but i got stuck building one of the deps, i think.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants